#pragma once

#include "instructions/base/instructions.h"
#include <memory>

namespace jvm {
namespace instructions {

class Frame;

class Ldc : public Index8Instruction {
public:
    void execute(std::shared_ptr<rtda::Frame> p_frame) override;
};

class LdcW : public Index16Instruction {
public:
    void execute(std::shared_ptr<rtda::Frame> p_frame) override;
};

class Ldc2W : public Index16Instruction {
public:
    void execute(std::shared_ptr<rtda::Frame> p_frame) override;
};

namespace detail {
void ExecuteLdc(std::shared_ptr<rtda::Frame> p_frame, uint16_t index);
}

} // namespace instructions
} // namespace jvm